package _case

import "errors"

// 可以有多个形参，多个返回值，返回值有参数名
// return 不需要指定返回值，默认会返回命名参数，有默认值
func SumCase(a, b int) (sum int, err error) {
	if a < b {
		err = errors.New("a < b")
		return
	}

	sum = a + b

	return
}

// 值传递和引用传递
func ReferenceCase(a int, b *int) {
	a += 1
	*b += 2
}

var g int
var G int

// 变量作用域
func ScopeCase(a, b int) {
	c := 100
	g = a + b + c
	G = g
}

type User struct {
	Name string
	Age  int
}

func NewUser(name string, age int) *User {
	return &User{name, age}
}

// 对象方法，首字母大写是公有成员，小字母是私有，外面访问不到
func (u *User) GetName() string {
	return u.Name
}
func (u *User) GetAge() int {
	return u.Age
}

func SumAndUserCase(a, b int) (u *User, sum int, err error) {
	// 指针类型，默认值nil，没有初始化不能赋值，报错
	//u.Name = "JC"
	//u.Age = a

	if a < b {
		err = errors.New("a < b")
		return
	}

	sum = a + b

	return
}
